package com.wtgroup.demo.leetcode.q009_回文数;

/**
 * @author dafei
 * @version 0.1
 * @date 2021/3/25 16:18
 */
public class S_Reverse {

    public static void main(String[] args) {
        Integer[] inputs = {121, -121, 10, -101, 24456, 343343, 0};
        S_Reverse exe = new S_Reverse();
        for (Integer i : inputs) {
            System.out.println(exe.isPalindrome(i));
        }
    }


    public boolean isPalindrome(int x) {
        // 负数, 尾数0(除了0) 不满足
        if (x < 0 || (x % 10 == 0 && x != 0)) {
            return false;
        }

        int rev = 0;
        while (rev < x) {
            int tail = x % 10;
            rev = rev * 10 + tail;
            x = x / 10;
        }

        // 当数字长度为奇数时，我们可以通过 revertedNumber/10 去除处于中位的数字。
        // 例如，当输入为 12321 时，在 while 循环的末尾我们可以得到 x = 12，revertedNumber = 123，
        // 由于处于中位的数字不影响回文（它总是与自己相等），所以我们可以简单地将其去除。
        return rev == x || (rev / 10 == x);
    }
}
